package com.study.七大原则.o2接口隔离原则;


/**
 * 类A通过接口Interface1依赖（使用）类B，类C通过接口Interface1依赖（使用）类D，
 * 如果接口Interface1对于类A和类C来说不是最小接口那么类B和类D必须取实现他们不需要的方法
 */
public class Segregation1 {

    public static void main(String[] args) {

    }

    /**
     * 按隔离原则应当这样处理：
     * 将接口Interface1拆分为独立的几个接口，类A和类C分别与他们需要的接口建立依赖关系。
     * 也就是采用接口隔离原则
     */
    interface Interface1{

        void operation1();
        void operation2();
        void operation3();
        void operation4();
        void operation5();
    }

    class A{   //A类通过接口  Interface1  依赖（使用） B类，但是只会用到1，2，3方法
        public void depend1(Interface1 i){
            i.operation1();
        }

        public void depend2(Interface1 i){
            i.operation2();
        }

        public void depend3(Interface1 i){
            i.operation3();
        }
    }

        class C{   //C类通过接口  Interface1  依赖（使用） B类，但是只会用到1，4，5方法
        public void depend1(Interface1 i){
            i.operation1();
        }

        public void depend4(Interface1 i){
            i.operation4();
        }

        public void depend5(Interface1 i){
            i.operation5();
        }
    }

    class B implements Interface1{
        @Override
        public void operation1() {
            System.out.println("B实现了operation1");
        }

        @Override
        public void operation2() {
            System.out.println("B实现了operation2");
        }

        @Override
        public void operation3() {
            System.out.println("B实现了operation3");
        }

        @Override
        public void operation4() {
            System.out.println("B实现了operation4");
        }

        @Override
        public void operation5() {
            System.out.println("B实现了operation5");
        }
    }

    class D implements Interface1{
        @Override
        public void operation1() {
            System.out.println("D实现了operation1");
        }

        @Override
        public void operation2() {
            System.out.println("D实现了operation2");
        }

        @Override
        public void operation3() {
            System.out.println("D实现了operation3");
        }

        @Override
        public void operation4() {
            System.out.println("D实现了operation4");
        }

        @Override
        public void operation5() {
            System.out.println("D实现了operation5");
        }
    }
}
